#include "interface.h"
#include "config.h"
#include "creatMap.h"
#include "functions.h"

void showMenu() {
    int selecton = 0;
    while (selecton != 4) {
        printf("-----------1. 开始游戏-----------\n");
        printf("-----------2. 游戏说明-----------\n");
        printf("-----------3. 选择难度-----------\n");
        printf("-----------4. 退出游戏-----------\n");
        
        scanf("%d", &selecton);

        switch (selecton) {
        case 1:
            // 为了保证每次生成的迷宫不同，用当前时间做随机种子
            srand(time(NULL));

            // 配内存：构建 MAZESIZE x MAZESIZE 的二维数组
            maze = (int **)malloc(sizeof(int *) * MAZESIZE);
            for (int i = 0; i < MAZESIZE; i++) {
                maze[i] = (int *)malloc(sizeof(int) * MAZESIZE);
            }

            // 初始化迷宫：全部设为墙 1
            for (int i = 0; i < MAZESIZE; i++) {
                for (int j = 0; j < MAZESIZE; j++) {
                    maze[i][j] = 1;
                }
            }

            // 选择入口：这里设定入口在左侧边界 (1,0)
            int startX = player_x;
            int startY = player_y;
            maze[startX][startY] = 0;  // 挖通入口

            // 调用 carveMaze 函数开始挖迷宫
            carveMaze(startX, startY);

            // 保证出口在边界：这里选择底部边界
            // 扫描底部边界内侧的一行（倒数第二行），找第一个通路，然后在其正下方挖通出口
            exitCol = -1;
            for (int j = 1; j < MAZESIZE - 1; j++) {
                if (maze[MAZESIZE - 2][j] == 0) { // 如果倒数第二行的该位置是通路
                    exitCol = j; 
                    break;
                }
            }
            // 如果找到了合适的位置，则在底部边界挖通出口
            if (exitCol != -1) {
                maze[MAZESIZE - 1][exitCol] = 0; // 终点的坐标
            } else {
                // 若未找到（理论上不会发生，因为DFS通常会通向某个边界附近），则默认在倒数第二列处设置出口
                maze[MAZESIZE - 1][MAZESIZE - 2] = 0;
            }



            pthread_t tid_display, tid_control;

            // 创建显示地图的线程
            if (pthread_create(&tid_display, NULL, displayThread, NULL) != 0) {
                perror("Failed to create display thread");
                exit(EXIT_FAILURE);
            }
            // 创建玩家控制的线程
            if (pthread_create(&tid_control, NULL, controlThread, NULL) != 0) {
                perror("Failed to create control thread");
                exit(EXIT_FAILURE);
            }

            // 等待显示线程结束（2分钟后显示线程会结束）
            pthread_join(tid_display, NULL);

            // 显示线程结束后，取消控制线程（因为 controlPlayer 是无限循环）
            pthread_cancel(tid_control);
            pthread_join(tid_control, NULL);
        break;
        
        case 2:
            printf("通过WASD控制迷宫中的人物，移动到终点即可顺利通关\n");
        break;
        
        case 3:
        level_loop:printf("1. 简单：60秒\n");
            printf("2. 普通：30秒\n");
            printf("3. 困难：10秒\n");
            scanf("%d", &level);
            if (level != 1 && level != 2 && level != 3) {
                printf("请正确选择\n");
                goto level_loop;
            }
            else {
                switch (level) {
                    case 1:
                        timeLimit = 60;
                        printf("已选择简单难度\n");
                        break;
                    case 2:
                        timeLimit = 30;
                        printf("已选择普通难度\n");
                        break;
                    case 3:
                        timeLimit = 10;
                        printf("已选择困难难度\n");
                        break;
                }
            }
        break;
        
        case 4:
            /* code */
        break;
        
        default:
            printf("请正确选择\n");
            break;
        }
    }
}